////////////////////////////////////////////////////////////////////////////
//
// Copyright 2018 Realm Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////

import CSharpSchemaExporter from './languages/csharp';
import JavaSchemaExporter from './languages/java';
import JSSchemaExporter from './languages/javascript';
import KotlinSchemaExporter from './languages/kotlin';
import SwiftSchemaExporter from './languages/swift';
import TSSchemaExporter from './languages/typescript';

import { ISchemaExporter } from './schemaExporter';

export enum Language {
  CS = 'C#',
  Java = 'Java',
  Kotlin = 'Kotlin',
  JS = 'JavaScript',
  ObjC = 'Objective-C',
  Swift = 'Swift',
  TS = 'TypeScript',
}

export const SchemaExporter = (language: Language): ISchemaExporter => {
  switch (language) {
    case Language.Swift:
      return new SwiftSchemaExporter();
    case Language.JS:
      return new JSSchemaExporter();
    case Language.TS:
      return new TSSchemaExporter();
    case Language.Java:
      return new JavaSchemaExporter();
    case Language.Kotlin:
      return new KotlinSchemaExporter();
    case Language.CS:
      return new CSharpSchemaExporter();
    default:
      throw new Error('Language not supported');
  }
};
